package com.gitee.huanminabc.jcommon.enums;

import lombok.Getter;

import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;

/**
 * @program: java-huanmin-utils
 * @description: 币种
 * Currency.getInstance("CNY") , 如果报错就表示你本地没有这个货币
 * @author: huanmin
 * @create: 2025-01-07 12:00
 **/
@Getter
public enum CurrencyEnum implements  EnumSuper {

    CNY("人民币"),
    USD("美元"),
    EUR("欧元"),
    GBP("英镑"),
    JPY("日元"),
    KRW("韩元"),
    HKD("港币"),
    AUD("澳元"),
    CAD("加元"),
    CHF("瑞士法郎"),
    SGD("新加坡元"),
    SEK("瑞典克朗"),
    NOK("挪威克朗"),
    DKK("丹麦克朗"),
    NZD("新西兰元"),
    RUB("俄罗斯卢布"),
    ZAR("南非兰特"),
    AED("阿联酋迪拉姆"),
    SAR("沙特里亚尔"),
    MXN("墨西哥比索"),
    TRY("土耳其里拉"),
    THB("泰铢"),
    MYR("马来西亚林吉特"),
    IDR("印尼卢比"),
    PHP("菲律宾比索"),
    BRL("巴西雷亚尔"),
    ARS("阿根廷比索"),
    INR("印度卢比"),
    ILS("以色列新谢克尔"),
    VND("越南盾"),
    ISK("冰岛克朗"),
    HUF("匈牙利福林"),
    TWD("台币"),
    CLP("智利比索"),
    CRC("哥斯达黎加科朗"),
    MOP("澳门元"),
    BIF("布隆迪法郎");


    private final String name;

    CurrencyEnum(String name) {
        this.name = name;
    }

    private static final Map<CurrencyEnum, String> CURRENCY_FORMATS = new HashMap<>();
    static {
        // 初始化货币格式映射, 只处理无小数的货币
        CURRENCY_FORMATS.put(CurrencyEnum.JPY, "#,##0"); // 日元，无小数
        CURRENCY_FORMATS.put(CurrencyEnum.KRW, "#,##0"); // 韩元，无小数
        CURRENCY_FORMATS.put(CurrencyEnum.IDR, "#,##0"); // 印尼卢比，无小数
        CURRENCY_FORMATS.put(CurrencyEnum.VND, "#,##0"); // 越南盾，无小数
        CURRENCY_FORMATS.put(CurrencyEnum.CLP, "#,##0"); // 智利比索，无小数
        CURRENCY_FORMATS.put(CurrencyEnum.ISK, "#,##0"); // 冰岛克朗，无小数
        CURRENCY_FORMATS.put(CurrencyEnum.HUF, "#,##0"); // 匈牙利福林，无小数
        CURRENCY_FORMATS.put(CurrencyEnum.TWD, "#,##0"); // 台币，无小数
        CURRENCY_FORMATS.put(CurrencyEnum.CRC, "#,##0"); // 哥斯达黎加科朗，无小数
        CURRENCY_FORMATS.put(CurrencyEnum.MOP, "#,##0"); // 澳门元，无小数
        CURRENCY_FORMATS.put(CurrencyEnum.BIF, "#,##0"); // 布隆迪法郎，无小数
    }
    //根据货币类型获取货币格式
    public static DecimalFormat getCurrencyFormat(CurrencyEnum currencyEnum) {
        String format = CURRENCY_FORMATS.get(currencyEnum);
        if (format == null) {
            format = "#,##0.00";
        }
        return new DecimalFormat(format);
    }

    //根据字符串获取货币格式
    public static DecimalFormat getCurrencyFormat(String code) {
        for (CurrencyEnum currencyEnum : CurrencyEnum.values()) {
            if (currencyEnum.getName().equals(code)) {
                return getCurrencyFormat(currencyEnum);
            }
        }
        return new DecimalFormat("#,##0.00");
    }

    @Override
    public String getCode() {
        return this.name();
    }

    @Override
    public String getDescription() {
        return name;
    }

}
